use rand::Rng;
use std::cmp::Ordering;
use std::io;
use std::{thread, time};

// 得到输入值
macro_rules! input_num_macros {
    () => {
            {
                println!("input_num_macros");

                let mut input = String::new();

                io::stdin()
                    .read_line(&mut input)
                    .expect("Falied to read line");

                input.trim().parse().unwrap()
        }
    };
}

// 求斐波那契数列得前n项 ==> 解法1：递归
fn main() {
    loop {
        println!("输入n：");

        let n: u32 = input_num();
        // let n: u32 = input_num_macros!();
        println!("input ：{n}");

        println!("Fibonacci:");
        let mut i = 0;
        while i < n {
            print!("{}  ",fibonacci(i));
            i = i + 1;
        }
        println!(" ");
        println!("fibonacci end");

        break;
    }
}

// 得到输入值
fn input_num() -> u32 {
    println!("input_num");

    let mut input = String::new();

    io::stdin()
        .read_line(&mut input)
        .expect("Falied to read line");

    input.trim().parse().unwrap()
}

//生成 n 阶斐波那契数列
fn fibonacci(n: u32) -> u32 {
    if n == 0 {
        return 0;
    } else if n == 1 {
        return 1;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
